import puppeteer, { Browser } from 'puppeteer-core';
import { BrowserConfig } from '../types/browser';
import { getChromePath, getExtensionArgs } from '../utils/browser';
import fs from 'fs';

export async function launchPuppeteer(config: BrowserConfig, userDataDir: string): Promise<Browser> {
  const chromePath = getChromePath(config.chromePath);
  
  if (!chromePath || !fs.existsSync(chromePath)) {
    throw new Error(`Chrome executable not found at: ${chromePath}`);
  }

  const args = [
    // 核心防检测参数
    '--disable-blink-features=AutomationControlled',
    '--disable-infobars',
    
    // 安全参数调整（根据环境选择）
    // process.env.NODE_ENV === 'production' ? '' : 
    '--no-sandbox',
    '--disable-setuid-sandbox',

    // GPU/渲染加速
    '--ignore-gpu-blocklist',
    '--enable-gpu-rasterization',
    '--enable-webgl',
    '--enable-accelerated-2d-canvas',
    '--enable-webgl-draft-extensions',

    // 本地化
    '--lang=zh-CN',
    '--timezone=Asia/Shanghai',

    // 网络优化
    '--disable-default-apps',
    '--disable-translate',

    // 进程管理
    '--disable-backgrounding-occluded-windows',
    '--disable-renderer-backgrounding',

    // 行为模拟
    '--autoplay-policy=user-gesture-required',
    '--no-default-browser-check',
    '--no-first-run'
  ];

  // 添加随机窗口尺寸
  const randomWidth = 1200 + Math.floor(Math.random() * 200);
  const randomHeight = 800 + Math.floor(Math.random() * 200);
  args.push(`--window-size=${randomWidth},${randomHeight}`);

 
  if (config.userAgent) {
    args.push(`--user-agent=${config.userAgent}`);
  } else {
    // 更新UserAgent到最新版本
    const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36';
    args.push(`--user-agent=${userAgent}`);
  }

  // 调整ignoreDefaultArgs
  const ignoreDefaultArgs = [
    '--enable-automation',  // 必须保留以隐藏自动化标记
    '--disable-extensions', // 允许加载扩展
  ];

  try {
    const extensions = getExtensionArgs();
    if (extensions.length > 0) {
      args.push(...extensions);
    }
  } catch (error) {
    console.error('扩展加载失败:', error);
  }

  const browser = await puppeteer.launch({
    executablePath: chromePath,
    userDataDir,
    headless: false,
    defaultViewport: null,
    args,
    ignoreDefaultArgs,
    product: 'chrome'
  });

  // 初始页面导航
  const page = await browser.newPage();
  await page.goto('https://www.baidu.com');
  
  return browser;
} 